অ্যাপাচি স্পার্ক (Apache Spark) একটি দ্রুত, ইন-মেমরি ডিস্ট্রিবিউটেড ডেটা প্রসেসিং ইঞ্জিন যা বড় পরিমাণ ডেটা প্রক্রিয়া এবং বিশ্লেষণে ব্যবহৃত হয়। এটি ডিস্ট্রিবিউটেড কম্পিউটিং সিস্টেম হিসেবে কাজ করে এবং এর মধ্যে বেশ কিছু গুরুত্বপূর্ণ কম্পোনেন্ট থাকে যা পুরো প্রসেসিং সিস্টেম পরিচালনা করে। এই কম্পোনেন্টগুলোর মধ্যে Driver, Executor, এবং Cluster Manager এর ভূমিকা অত্যন্ত গুরুত্বপূর্ণ।
এই টিউটোরিয়ালে, আমরা Spark Components যেমন Driver, Executor, এবং Cluster Manager সম্পর্কে বিস্তারিতভাবে আলোচনা করব।
1. Driver
Driver কম্পোনেন্টটি স্পার্ক অ্যাপ্লিকেশনের কন্ট্রোল প্লেন হিসেবে কাজ করে এবং সমস্ত ক্লাস্টার কম্পোনেন্টের সাথে যোগাযোগ স্থাপন করে। এটি এক ধরণের সেন্ট্রাল কন্ট্রোলার যা কাজের প্রোগ্রাম এবং রিসোর্সের ব্যবস্থাপনা নিয়ন্ত্রণ করে। স্পার্ক অ্যাপ্লিকেশনে ড্রাইভার হোস্ট করে SparkContext এবং এটি প্রসেসিংয়ের জন্য সমস্ত টাস্ক পরিচালনা করে।
Driver-এর কাজ:
- Job Scheduling: ড্রাইভার সমস্ত কাজের শিডিউলিং করে। এটি ক্লাস্টারে বিভিন্ন কাজের জন্য টাস্ক তৈরি করে এবং এক্সিকিউটরের কাছে পাঠায়।
- Cluster Coordination: ড্রাইভার ক্লাস্টার ম্যানেজারের সাথে যোগাযোগ করে এবং ক্লাস্টারের সঠিক রিসোর্স বরাদ্দ নিশ্চিত করে।
- Result Collection: ড্রাইভার এক্সিকিউটরদের থেকে ফলাফল সংগ্রহ করে এবং ব্যবহারকারীর কাছে তা ফেরত পাঠায়।
- Task Distribution: স্পার্ক অ্যাপ্লিকেশনের কাজগুলি ছোট ছোট টাস্কে বিভক্ত করে এবং সেই টাস্কগুলো এক্সিকিউটরদের মধ্যে বিতরণ করে।
Driver Example:
val conf = new SparkConf().setAppName("MyApp")
val sc = new SparkContext(conf)
এখানে:
- SparkConf কনফিগারেশন সেট আপ করে।
- SparkContext সৃষ্টির মাধ্যমে ড্রাইভার স্পার্ক অ্যাপ্লিকেশনটি চালায় এবং টাস্কগুলো এক্সিকিউটরের মধ্যে ভাগ করে।
2. Executor
Executor কম্পোনেন্টটি স্পার্কের ক্লাস্টারের কর্মী অংশ, যা ডেটা প্রসেসিংয়ের জন্য মূল কাজটি করে। এটি কার্যকরভাবে ডেটা প্রসেসিং করে এবং টাস্কের বাস্তবায়ন নিশ্চিত করে। প্রতিটি স্পার্ক অ্যাপ্লিকেশন চালানোর সময়, ক্লাস্টারের প্রতিটি নোডে এক বা একাধিক executor চলে, যা ডেটা ইনডেক্সিং, প্রসেসিং এবং ফলাফল তৈরি করে।
Executor-এর কাজ:
- Task Execution: এক্সিকিউটর মূলত সমস্ত কার্যকরী টাস্কগুলি সম্পাদন করে।
- Memory Management: এক্সিকিউটর ইন-মেমরি ক্যাশিং ব্যবহার করে ডেটা প্রসেসিং করে, যা ইনডেক্সিং এবং ডেটা প্রসেসিংকে দ্রুত করে তোলে।
- Storage: এক্সিকিউটর ডেটা প্রসেস করার পর ফলাফল স্টোর করে এবং ড্রাইভারকে রিটার্ন করে।
- Fault Tolerance: এক্সিকিউটর নির্দিষ্ট সময়ে ডেটা স্টোর করে এবং যদি কোনও নোড ফেল হয়ে যায় তবে পুনরুদ্ধারের জন্য রিডানডেন্সি ব্যবস্থা থাকে।
Executor Example:
এক্সিকিউটর অ্যাপ্লিকেশনের অংশ হিসেবে ক্লাস্টার নোডে চলে এবং স্পার্ক টাস্কের বাস্তবায়ন করে।
val rdd = sc.parallelize(Seq(1, 2, 3, 4))
val result = rdd.map(x => x * 2).collect()
এখানে:
- map ফাংশনটি এক্সিকিউটর দ্বারা প্রসেস করা হয় এবং collect() ফাংশনটি এক্সিকিউটরের কাজের ফলাফল ড্রাইভারকে পাঠায়।
3. Cluster Manager
Cluster Manager স্পার্ক ক্লাস্টারের সঠিক রিসোর্স ব্যবস্থাপনা এবং স্কেলিং নিশ্চিত করে। এটি একটি ধরনের রিসোর্স প্ল্যানার, যা cluster resources পর্যবেক্ষণ করে এবং executors কে স্পার্ক অ্যাপ্লিকেশন চালানোর জন্য সঠিক রিসোর্স বরাদ্দ করে।
স্পার্ক দুটি জনপ্রিয় ক্লাস্টার ম্যানেজার সমর্থন করে:
- Standalone Cluster Manager: স্পার্কের নিজস্ব ক্লাস্টার ম্যানেজার যা একটি একক সার্ভারে কাজ করতে পারে।
- YARN (Yet Another Resource Negotiator): হাডুপ-এর ক্লাস্টার ম্যানেজার যা বড় ডিস্ট্রিবিউটেড সিস্টেমের জন্য ব্যবহৃত হয়।
- Mesos: একটি ডিস্ট্রিবিউটেড সিস্টেম যা ক্লাস্টারের রিসোর্স ম্যানেজমেন্ট এবং রিলায়েবিলিটি পরিচালনা করে।
Cluster Manager-এর কাজ:
- Resource Allocation: ক্লাস্টার ম্যানেজার এক্সিকিউটরের জন্য সঠিক রিসোর্স বরাদ্দ করে এবং তাকে কার্যকরভাবে কাজ করতে সহায়তা করে।
- Job Scheduling: ক্লাস্টার ম্যানেজার স্পার্ক জবগুলি কনফিগার করে এবং এক্সিকিউটরদের কাছে রিসোর্সের মাধ্যমে টাস্ক পাঠায়।
- Fault Tolerance: ক্লাস্টার ম্যানেজার নিশ্চিত করে যে, নোড ফেলিওর হওয়ার পরেও সিস্টেমের কার্যকারিতা বজায় থাকে। এটি কাজের পুনরুদ্ধারের জন্য রিসোর্স অ্যাসাইনমেন্ট চালায়।
Cluster Manager Example:
$ spark-submit --master yarn --deploy-mode cluster --class com.example.MyApp myapp.jar
এখানে:
- --master yarn: YARN ক্লাস্টার ম্যানেজার ব্যবহার করার নির্দেশ।
- --deploy-mode cluster: ক্লাস্টার মোডে অ্যাপ্লিকেশন চালানোর জন্য নির্দেশ।
How Driver, Executor, and Cluster Manager Interact
- Driver: প্রথমে অ্যাপ্লিকেশন শুরু করার জন্য ড্রাইভার সলিউশন পরিকল্পনা করে এবং SparkContext তৈরি করে। এটি ক্লাস্টার ম্যানেজারের সাথে যোগাযোগ করে এবং রিসোর্স বরাদ্দ চায়।
- Cluster Manager: ক্লাস্টার ম্যানেজার রিসোর্স বরাদ্দ করে এবং executors কে কাজের জন্য সঠিক রিসোর্স দেয়।
- Executor: এক্সিকিউটরগুলো ড্রাইভারের কাছ থেকে টাস্ক গ্রহণ করে এবং কাজ শুরু করে। তারা ইনডেক্সিং এবং ডেটা প্রসেসিং করে এবং ফলাফল ড্রাইভারকে পাঠায়।
Conclusion
Spark Components যেমন Driver, Executor, এবং Cluster Manager একে অপরের সাথে সমন্বিতভাবে কাজ করে এবং স্পার্ক অ্যাপ্লিকেশনটি ডিস্ট্রিবিউটেড কম্পিউটিং পদ্ধতিতে সফলভাবে চালায়। Driver ডেটার মূল কন্ট্রোল প্লেন হিসেবে কাজ করে, Executor ডেটা প্রসেসিং পরিচালনা করে, এবং Cluster Manager রিসোর্স বরাদ্দ এবং কাজের শিডিউলিং করে। এগুলোর সম্মিলিত কাজই স্পার্ক অ্যাপ্লিকেশনগুলোর দ্রুত এবং কার্যকরী প্রসেসিং নিশ্চিত করে।
Read more